/**
	wolf - yan
    version 1.0 标准插件
		验证标准
*/
var index = 0;

var v_input_type = ":text,select,textarea";

/**
 *  验证类型key
 *     <input data_v="not_empty"/>
 *  必选项
 * */
var v_input_attr_key = "data_v";
/**
 *  验证 消息前缀  “用户名+验证消息”  用户名不能为空！
 *  <input data_v_info="用户名"/>
 * */
var v_input_attr_info_key = "data_v_info";
/**
 *  验证消息标签ID  <label id=“id0”>用户名不能为空！</label>
 *  内部使用
 * */
var v_input_attr_msg_key = "v_lal";
/**
 * 是否触发事件
 * 目前支持   blur事件
 * <input v_eve="blur"/>
 * */
var v_input_event_key="v_eve";
/**
	验证表单 
*/
var wolf_v = {
    /**
     * 初始化参数存放
     * */
    v_arry:"",
    /**
     * 验证后返回结果详情   提示消息  操作对象
     *   t: 错误提示信息
         d: "data_v_info" 标签提示信息 需要替换  t.replace("&p",d) 只有  5  需要处理
         o:  验证input 对象
         tag: 标签显示格式  只有  3 时追加显示
         flg:  false 验证不通过  true 验证通过
     */
    v_check_arry:[],
    /**全部验证结束  返回true全部通过，false不通过*/
    v_check_result:true,
	/**获取验证标签*/
	tag_array:function(objId){
		var array = "";
		if(!wolf.isNotNull(objId)){
			array = $(v_input_type);
		} else {
			array = $(v_input_type,"#"+objId);
		}
		return array;
	},
    /***
     * 验证入口  提交验证
     * @param arry
     */
    v_validation:function(){

        this.v_remove();
        this.v_check_result = true;

        if(wolf.isNotNull(wolf_v.v_bean)){
            var input_array = this.tag_array(wolf_v.v_bean.formId);
            if(wolf.isNotNull(input_array)){
                wolf.data_foreach(input_array,function(i,input_obj){
                    var obj_attr = $(input_obj).attr(v_input_attr_key);
                    var obj_attr_event = $(input_obj).attr(v_input_event_key);

                    /**验证当前属性是否参与验证*/
                    if(wolf.isNotNull(obj_attr)){
                        var flag = wolf_v.v_test(obj_attr,input_obj,false);
                    }

                    /**验证是否绑定事件 失去焦点事件*/
                    if(wolf.isNotNull(obj_attr_event) && obj_attr_event == "blur"){
                        wolf_v.v_blur(input_obj);
                    }
                })
            }
        }
        wolf_v.v_alert();
    },
    /***
     * 验证入口  事件验证  焦点事件 ，单独使用
     * @param arry
     */
    v_validation_even:function(){
        var inputArray= this.v_bean.eventArray;
        if(wolf.isNotNull(inputArray) && inputArray.length > 0){
            wolf.data_foreach(inputArray,function(i,str){
                $("#"+str).blur(function(){
                    var c_attr_msg_id = $(this).attr(v_input_attr_msg_key);
                    if(wolf.isNotNull(c_attr_msg_id)){
                        $("#"+c_attr_msg_id).remove();
                    }
                    var c_val = $(this).val();
                    var c_attr = $(this).attr(v_input_attr_key);
                    var c_attr_info = $(this).attr(v_input_attr_info_key);
                    var obj = wolf_v.v_test(c_attr,this,false);
                    if(!obj.flg){
                        wolf_v.v_alert_type(obj);
                    }
                });
            });
        }

    },
    /**焦点事件*/
    v_blur:function(tag_obj){
        $(tag_obj).blur(function(){
            var c_attr_msg_id = $(this).attr(v_input_attr_msg_key);
            if(wolf.isNotNull(c_attr_msg_id)){
                $("#"+c_attr_msg_id).remove();
            }
            var c_val = $(this).val();
            var c_attr = $(this).attr(v_input_attr_key);
            var c_attr_info = $(this).attr(v_input_attr_info_key);
            var obj = wolf_v.v_test(c_attr,this,true);

            if(!obj.flg){
                wolf_v.v_alert_type(obj);
            }
        });
    },


    /**
     验证提示方式
     1、弹出
     2、追加
     3、浮动
     4、回调事件（自行处理提示消息） 遍历错误信息，
     5、返回所有错误信息，有用户整体处理
     */
    v_alert:function() {
        var arry = this.v_check_arry;
        var alertTypeInfo = "";
        var o_info_type = this.v_bean.alertType;
        if(arry.length > 0){
            if(wolf.isNotNull(o_info_type)){
                if(o_info_type == 5){
                    wolf_v.v_bean.alertTypeCall(-1,arry);
                    return;
                }
                wolf.data_foreach(arry,function(i,obj){
                    wolf_v.v_alert_type(obj);
                });

            }else{
                alert("提示类型未设置，请审核数组参数！");
            }
        }
    },
    /**
     * 显示风格
     * */
    v_alert_type:function(obj){
        var alertTypeInfo = "";
        var o_info_type = this.v_bean.alertType;
        var tt = obj.t.replace("&p",obj.d);
        if(o_info_type == 1){
            alertTypeInfo += tt + "\n";
        }else if( o_info_type == 2){
            $(obj.o).attr(v_input_attr_msg_key,obj.lalId);
            $(obj.o).after(obj.tag.replace("_msg_",tt));
        }else if(o_info_type == 3){
            alert("暂无实现！");
        }else if(o_info_type == 4){
            if(wolf.isFunction(this.v_bean.alertTypeCall)){
                wolf_v.v_bean.alertTypeCall(tt,obj.o);
            }else{
                alert("回调事件无效！");
            }
        }
        if(o_info_type == 1){
            alert(alertTypeInfo);
        }
    },
    /***
     * 验证
     * singleFlag 是否为单词验证
     * w_v_type 验证类型
     * input_obj 验证对象
     */
    v_test:function(w_v_type,input_obj,singleFlag){
        /**验证成功删除提示消息*/
        var flag = false;

        var input_val = $(input_obj).val();
        var info_msg = eval("this.v_info."+w_v_type);
        var input_info = $(input_obj).attr(v_input_attr_info_key);

        if(wolf.isNotNull(w_v_type)){
            if(w_v_type != "not_empty" && w_v_type.indexOf("pass") < 0){
                var v_r = eval("this.v_rule."+w_v_type);
                var reg =new RegExp(v_r);
                flag = reg.test(input_val);

            }else if( w_v_type == "not_empty"){
                flag = wolf.isNotNull(input_val);

            }else if( w_v_type.indexOf( "pass") >= 0){
                var strs = w_v_type.split(",");
                if(strs.length > 0){
                    var pass = input_val;
                    if(strs.length == 2){
                        var repass = $("#"+strs[1]).val();
                        if(wolf.isNotNull(pass) && wolf.isNotNull(repass)){
                            flag = (pass == repass);
                        }else{
                            flag = false;
                        }
                        info_msg = (flag ?"":eval("this.v_info.repass"));
                    }else if(wolf.isNotNull(pass)){
                        flag = true;
                    }
                }
            }
        }
        var arry_tmp = {
            t:info_msg,
            d:(input_info==null)?"此项":input_info,
            o:input_obj,
            tag:"<label id='id"+(index)+"'>_msg_</label>",
            lalId:"id"+(index ++),
            flg:flag
        };
        /**错误存储提示信息*/
        if(!flag && !singleFlag){
            this.v_check_arry.push(arry_tmp);
            this.v_check_result = false;
        }
        return arry_tmp;
    },
    /***
     * 删除所有提示消息
     */
    v_remove:function(){
        if(wolf.isNotNull(this.v_check_arry) && this.v_check_arry.length > 0){
            wolf.data_foreach(this.v_check_arry,function(i,obj){
                $("#"+obj.lalId).remove();
            });
        }
        wolf_v.v_check_arry.splice(0,wolf_v.v_check_arry.length);
    },
    /**
     验证规则 - 正则表达式
     */
    v_rule :{
        number:"^-?\\d+$",
        float:"^(-?\\d+)(\\.\\d+)?$",
        letter:"^[A-Za-z]+$",
        dateR:"^(?:19|20)[0-9][0-9]-(?:(?:0[1-9])|(?:1[0-2]))-(?:(?:[0-2][1-9])|(?:[1-3][0-1])) (?:(?:[0-2][0-3])|(?:[0-1][0-9])):[0-5][0-9]:[0-5][0-9]$",
        email:"^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$",
        phone:/^1\d{10}$/,
        pass:"",
        characters:"^[\u0391-\uFFE5]+$",
        english:"^[A-Za-z]+$"
},

    /**
     验证提示消息
     */
    v_info :{
        not_empty:"&p不能为空！",
        number:"&p只能输入数字，不包括小数点！",
        float:"&p只能输入数字，小数点！",
        letter:"&p只能输入字母！",
        characters:"&p只能输入汉字！",
        english:"&p只能输入英文字母！",
        dateR:"&p请输入正确的日期类型！",
        email:"&p请输入正确的邮箱格式！",
        phone:"&p请输入正确的手机格式！",
        pass:"&p不能为空，请重新输入！",
        repass:"&p不符，请重新输入！"
    },
    /***
     * 验证数组参数
     * formId
     */
    v_bean:{
        /*值验证form表单的条件 */
        formId:"",
        /**提示消息类型 1、弹出2、追加3、浮动4、回调事件（自行处理提示消息）5 验证完表单，返回整体验证结果 适用于表单提交*/
        alertType:"",
        /**提示消息类型 弹回调事件（自行处理提示消息） 参数1 提示信息  参数2 标签对象*/
        alertTypeCall:"",
        /**独立注册事件  绑定input id  调用v_validation_even 初始化脚本*/
        eventArray:[]
    }

};


